2020 German IT Salaries

Dylan Montenegro

5/3/2022

Introduction

Tools Required

library(knitr) #used for dynamic report generation
library(rmarkdown) #document conversion
library(ggplot2) #used for data visualization
library(plotly) #used for interactive plots
library(dplyr) #used for data manipulation
library(readr) #used to read rectangular data

Data Source

Data Import and Preparation

Salaries <- read_csv('~/Desktop/Data2401/archive/IT Salary Survey EU  2020.csv')

Preparation

Salaries <- Salaries %>% rename(Base_Salary = `Yearly brutto salary (without bonus and stocks) in EUR`)


Salaries <- Salaries %>% select(- c(Timestamp, `Years of experience in Germany`, `Yearly bonus + stocks in EUR`, `Other technologies/programming languages you use often`, `Annual brutto salary (without bonus and stocks) one year ago. Only answer if staying in the same country`, `Annual bonus+stocks one year ago. Only answer if staying in same country`, `Have you lost your job due to the coronavirus outbreak?`, `Have you been forced to have a shorter working week (Kurzarbeit)? If yes, how many hours per week`, `Have you received additional monetary support from your employer due to Work From Home? If yes, how much in 2020 in EUR`, `Employment status`, `Number of vacation days`))

Salaries <- Salaries %>% group_by(City) %>% mutate(number_responses_per_city = n())
Salaries <- Salaries %>% group_by(Position) %>% mutate(number_people_per_position = n())
Salaries <- Salaries %>% group_by(`Your main technology / programming language`) %>% mutate(number_people_per_main_tech= n())


x <- Salaries$`Your main technology / programming language`
Salaries$`Your main technology / programming language` <- toupper(x)


main_tech_swap <- function(old, new1){ 
    test <- Salaries      
  test$`Your main technology / programming language`[test$`Your main technology / programming language` == old] <- new1
  return(test)
}


experience_swap <- function(old2, new2){ 
    test2 <- Salaries  
    test2$`Total years of experience`[test2$`Total years of experience` == old2]  <- new2
  return(test2)
}


company_type_swap <- function(old4, new4){
  test4 <- Salaries
  test4$`Company type`[test4$`Company type` == old4] <- new4
  return(test4)
}

city_swap <- function(old5, new5){
  test5 <- Salaries
  test5$`City`[test5$`City` == old5] <- new5
  return(test5)
}

main_language_swap <- function(old6, new6){
  test6 <- Salaries
  test6$`Main language at work`[test6$`Main language at work` == old6] <- new6
  return(test6)
}

seniority_level_swap <- function(old7, new7){
  test7 <- Salaries
  test7$`Seniority level`[test7$`Seniority level` == old7] <- new7
  return(test7)
}

position_swap <- function(old8, new8){
  test8 <- Salaries
  test8$`Position`[test8$`Position` == old8] <- new8
  return(test8)
}
Salaries$`Total years of experience` <- as.numeric(as.character(Salaries$`Total years of experience`))

Variables

##  [1] "Age"                                        
##  [2] "Gender"                                     
##  [3] "City"                                       
##  [4] "Position"                                   
##  [5] "Total years of experience"                  
##  [6] "Seniority level"                            
##  [7] "Your main technology / programming language"
##  [8] "Base_Salary"                                
##  [9] "Сontract duration"                          
## [10] "Main language at work"                      
## [11] "Company size"                               
## [12] "Company type"                               
## [13] "number_responses_per_city"                  
## [14] "number_people_per_position"                 
## [15] "number_people_per_main_tech"

Cutting Down Responses

Sex <- c("Male", "Female")
Salaries2 <- Salaries %>% filter(number_responses_per_city >= 10 & Base_Salary < 1000000 & Gender %in% Sex & number_people_per_main_tech > 9)

Exploratory Data Analysis

Exploratory Data Analysis Pt 2

## # A tibble: 3 × 2
##   Gender      n
##   <chr>   <int>
## 1 Male     1049
## 2 Female    192
## 3 Diverse     2
## # A tibble: 2 × 2
##   Gender     n
##   <chr>  <int>
## 1 Male     643
## 2 Female   115

Exploratory Data Analysis Pt 3

## # A tibble: 10 × 2
##    City           n
##    <chr>      <int>
##  1 Berlin       681
##  2 Munich       236
##  3 Frankfurt     44
##  4 Hamburg       40
##  5 Stuttgart     33
##  6 Cologne       20
##  7 Düsseldorf    15
##  8 Amsterdam      9
##  9 Karlsruhe      7
## 10 Nürnberg       7
## # A tibble: 7 × 2
##   City           n
##   <chr>      <int>
## 1 Berlin       495
## 2 Munich       159
## 3 Frankfurt     30
## 4 Hamburg       30
## 5 Stuttgart     24
## 6 Cologne       13
## 7 Düsseldorf     7

Exploratory Data Analysis Pt 4

## # A tibble: 10 × 2
##    Position               n
##    <chr>              <int>
##  1 Software Engineer    388
##  2 Backend Developer    174
##  3 Data Scientist       110
##  4 Frontend Developer    89
##  5 QA Engineer           71
##  6 DevOps                57
##  7 Mobile Developer      53
##  8 ML Engineer           42
##  9 Product Manager       39
## 10 Data Engineer         28
## # A tibble: 10 × 2
##    Position               n
##    <chr>              <int>
##  1 Software Engineer    243
##  2 Backend Developer    124
##  3 Data Scientist        65
##  4 QA Engineer           49
##  5 Frontend Developer    41
##  6 Product Manager       31
##  7 Mobile Developer      28
##  8 DevOps                24
##  9 ML Engineer           24
## 10 Data Engineer         22

Exploratory Data Analysis Pt 5

Exploratory Data Analysis Pt 6

## # A tibble: 6 × 2
##   `Seniority level`     n
##   <chr>             <int>
## 1 Senior              565
## 2 Middle              366
## 3 Lead                166
## 4 Junior               79
## 5 Head                 44
## 6 Entry level           4
## # A tibble: 6 × 2
##   `Seniority level`     n
##   <chr>             <int>
## 1 Senior              355
## 2 Middle              211
## 3 Lead                104
## 4 Junior               38
## 5 Head                 36
## 6 Entry level           2

Exploratory Data Analysis Pt 7

## # A tibble: 5 × 2
##   `Main language at work`     n
##   <chr>                   <int>
## 1 English                  1024
## 2 German                    186
## 3 Russian                    15
## 4 Italian                     3
## 5 Spanish                     3
## # A tibble: 4 × 2
##   `Main language at work`     n
##   <chr>                   <int>
## 1 English                   649
## 2 German                     97
## 3 Russian                     3
## 4 Deuglisch                   1

Exploratory Data Analysis Pt 8

## # A tibble: 10 × 2
##    `Your main technology / programming language`     n
##    <chr>                                         <int>
##  1 PYTHON                                          228
##  2 JAVA                                            216
##  3 JAVASCRIPT                                      116
##  4 C                                                98
##  5 PHP                                              73
##  6 GO                                               32
##  7 TYPESCRIPT                                       31
##  8 SWIFT                                            30
##  9 SCALA                                            28
## 10 KOTLIN                                           27
## # A tibble: 10 × 2
##    `Your main technology / programming language`     n
##    <chr>                                         <int>
##  1 JAVA                                            169
##  2 PYTHON                                          159
##  3 JAVASCRIPT                                       74
##  4 C                                                51
##  5 PHP                                              50
##  6 SCALA                                            23
##  7 GO                                               22
##  8 KOTLIN                                           20
##  9 RUBY                                             19
## 10 SWIFT                                            19

Exploratory Data Analysis Pt 9

Exploratory Data Analysis Pt 10

## # A tibble: 5 × 2
##   `Company size`     n
##   <chr>          <int>
## 1 101-1000         273
## 2 1000+            262
## 3 11-50            100
## 4 51-100            86
## 5 up to 10          26
## # A tibble: 5 × 2
##   `Company type`          n
##   <chr>               <int>
## 1 Product               481
## 2 Startup               161
## 3 Consulting / Agency    71
## 4 Ecommerce               7
## 5 Outsource               3

Experience Vs Salary

City, Gender, And Main Tech Used

Experience Vs Salary Pt. 2

Position and Seniority Level

Experience Vs Salary Pt. 3

Company Size and Type

Summary